package br.ufmt.eit.cursos.manegedbean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.ufmt.eit.cursos.cep.WebServiceCep;
import br.ufmt.eit.cursos.dao.AlunoDAO;
import br.ufmt.eit.cursos.dao.CursoDAO;
import br.ufmt.eit.cursos.entidades.Aluno;
import br.ufmt.eit.cursos.entidades.Curso;
import br.ufmt.eit.cursos.entidades.Estado;
import br.ufmt.eit.cursos.entidades.Pais;

public class CursoMB 
{
	private Curso curso;
	private Aluno aluno;
	private AlunoDAO alunoDAO;
	private CursoDAO cursoDAO;
	
	public CursoMB()
	{
		curso = new Curso();
	}
	
	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public List<Curso> getCursosCadastrados()
	{
		cursoDAO = new CursoDAO();
		
		List<Curso> cursos = cursoDAO.getTodosAbertos();
		
		return cursos;
	}
	
	public String novaInscricao()
	{
		alunoDAO = new AlunoDAO();
		cursoDAO = new CursoDAO();
		curso = cursoDAO.getCursoById(curso.getId());
		aluno = new Aluno();
		
		return "novaInscricao";
	}
	
	public void verificaAluno()
	{
		Aluno temp = null;
		FacesMessage msg;
		
		try
		{
			AlunoDAO alunoDAO = new  AlunoDAO();
			String cpf = aluno.getCPF();
			cpf = cpf.replace(".","");
			cpf = cpf.replace("-","");
			aluno.setCPF(cpf);
			temp = alunoDAO.getAlunoPeloCPF(aluno.getCPF());
		}
		catch (Exception ex)
		{
			msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), null);
			FacesContext.getCurrentInstance().addMessage(null, msg);
		}
		
		if (temp != null)
		{
			boolean achou = false;
			int i = 0;
			while (i < curso.getAlunos().size() && achou == false)
			{
				Aluno aux = curso.getAlunos().get(i);
				if (temp.getCPF().equals(aux.getCPF()))
				{
					achou = true;
				}
				i++;
			}
			
			if (achou)
			{
				msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Aluno com esse CPF já foi cadastrado", null);
				FacesContext.getCurrentInstance().addMessage(null, msg);
			}
		}
	}
	
	public void consultaCEP()
	{
		if (aluno.getCEP().length() == 9)
		{
			WebServiceCep consultaCep = WebServiceCep.searchCep(aluno.getCEP());
			
			if (consultaCep.wasSuccessful())
			{
				aluno.setBairro(consultaCep.getBairro().toUpperCase());
				aluno.setCidade(consultaCep.getCidade().toUpperCase());
				aluno.setEndereco_UF(consultaCep.getUf().toUpperCase());
				aluno.setEndereco(consultaCep.getLogradouroFull().toUpperCase());
			}
		}
	}
	
	public void formatar()
	{
		aluno.setCEP(aluno.getCEP().replace("-", ""));
		aluno.setCPF(aluno.getCPF().replace("-", ""));
		aluno.setCPF(aluno.getCPF().replace(".", ""));
	}
	
	public String cadastrar()
	{
		try
		{
			formatar();
			curso.getAlunos().add(aluno);
			
			alunoDAO.iniciarTransacao();
			alunoDAO.inserir(aluno);
			alunoDAO.confirmarTransacao();
			
			cursoDAO.iniciarTransacao();
			cursoDAO.alterar(curso);
			cursoDAO.confirmarTransacao();
			
			aluno = new Aluno();
			curso = new Curso();
			
			FacesMessage msg;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro realizado com sucesso", null);
			FacesContext.getCurrentInstance().addMessage(null, msg);
			
			return "cursos";
		}
		catch (Exception e)
		{
			if (alunoDAO.estaAbertaTransacao())
				alunoDAO.cancelarTransacao();
			if (cursoDAO.estaAbertaTransacao())
				cursoDAO.cancelarTransacao();
			FacesMessage msg;
			msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), null);
			FacesContext.getCurrentInstance().addMessage(null, msg);
			
			return "";
		}
	}
}
